#ifndef _NETSERVER_H
#define _NETSERVER_H

#define Net NetServer::getInstance()

#include "../StdAfx.h"

class Connection;

class NetServer
{
public:
	// Instancia Singleton
	static NetServer* getInstance();
	// Inicializar servidor
	void init(std::string port);
	void init(std::string port,size_t tpSize);
	// Arrancar servidor
	void run();
	// Detener servidor
	void stop();
	// Detener una conexion activa del servidor
	void removeConnection(connection_ptr con);
private:
	// Constructor
	NetServer();
	// Destructor
	~NetServer();
	// Callback de conexion aceptada
	void handleAccept(const boost::system::error_code& e);
	// Detener todas las conexiones
	void stopAllConnections();
	// Variables privadas
	static NetServer* mInstance;
	boost::asio::io_service mIoService;
	std::vector<boost::shared_ptr<boost::thread> > mThreads;
	boost::asio::ip::tcp::acceptor mAcceptor;
	std::size_t mThreadPoolSize;
	connection_ptr mConn;
	std::set<connection_ptr> mClientsVector;
	boost::mutex mMuxMap;
};

#endif
